main() {
  // 构造函数的作用：创建对象，初始化属性，返回对象

  // 调用主构造函数
  Person p = new Person(name: '张三', age: 18, sex: '男');
  print(p.name); // 访问属性
  print(p.age);
  print(p.sex);
  p.sayHello(); // 调用方法

  // 调用命名构造函数
  Person p1 = new Person.male(name: '李四', age: 19);
  print(p1.name);
  print(p1.age);
  print(p1.sex);
  p1.sayHello();
}

// 类的基础用法
class Person {
  // 属性(相当于定义变量)
  String? name;
  int? age;
  String? sex;

  // 构造函数(主)，跟类名同名
  Person({String? name, int? age, String? sex}) {
    print('主构造函数被调用了');
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

  // 构造函数的简写
  Person.shorthand({this.name, this.age, this.sex});



  // 命名构造函数(次)，可以有多个
  // Person.male({String? name, int? age}) {
  //   print('命名构造函数被调用了');
  //   this.name = name;
  //   this.age = age;
  //   this.sex = '男';
  // }

  // 构造函数的简化，：后面的也可以做属性的初始化
  Person.male({this.name, this.age}) : sex = '男';


  // 方法(相当于定义函数)
  void sayHello() {
    print('你好，我是$name,我今年$age岁,我是$sex');
    // print('你好，我是${this.name}');
  }
}
